package com.xlh.dao.courseTest;

import com.xlh.dto.courseTest.UserPaperExperimentReportDTO;
import com.xlh.dto.courseTest.check.ChapterCountDTO;
import com.xlh.dto.courseTest.check.ClassUncheckedCountDTO;
import com.xlh.dto.courseTest.check.StudentBaseListDTO;
import com.xlh.dto.courseTest.check.StudentListDTO;
import com.xlh.dto.courseTest.experiment.UserExperimentReportInfoDTO;
import com.xlh.dto.courseTest.experiment.UserExperimentTimeInfoDTO;
import com.xlh.dto.user.UserInfoDTO;
import com.xlh.pojo.courseTest.ExperimentReport;
import com.xlh.pojo.user.UserClass;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface ExperimentReportMapperExt {
    /**
     * 实验报告提交情况列表
     */
    List<StudentListDTO> listStudent(
            @Param("classId") Long classId, @Param("chapterId") Long chapterId, @Param("status") Integer status, @Param("studentInfo") String studentInfo
    );

    /**
     * 查询实验报告提交次数
     */
    Long getCount(@Param("userId") Long userId, @Param("type") Integer type);

    List<ChapterCountDTO> countGroupByChapterId(@Param("chapterIds") List<Long> chapterIds);

    /**
     * 学生实验报告成绩
     */
    List<StudentBaseListDTO> listStudentBase(@Param("courseId") Long courseId, @Param("studentId") Long userId);

    List<UserPaperExperimentReportDTO> selectByIds(@Param("ids") List<Long> ids);

    void cleanPaperData();

    void updateByAnswerSheetId(@Param("answerSheetId") Long answerSheetId);

    List<ExperimentReport> selectByChapterIdsClassId(@Param("chapterIds") List<Long> chapterIds, @Param("classId") Long classId);

    List<ClassUncheckedCountDTO> selectUncheckedByCourseIds(@Param("courseIdList") List<Long> courseIdList);

    List<ExperimentReport> selectByAnswerSheetIds(@Param("answerSheetIds") List<Long> answerSheetIds);

    /**
     * 获取报告分数总数
     * @param experimentChapterId 章节ID | 任务ID
     * @param userClasses 学生信息
     * @return
     */
    List<UserExperimentReportInfoDTO> getReportScoreCount(@Param("chapterId") Long experimentChapterId, @Param("userClasses") List<UserClass> userClasses);


    /**
     * 根据学生ID和章节ID 获取报告的平均分数
     * @param experimentChapterId 章节ID
     * @param userClasses  学生信息
     * @return
     */
    String getReportScoreAverage(@Param("chapterId") Long experimentChapterId, @Param("userClasses") List<UserClass> userClasses);


    /**
     * 查询学生实验报告信息根据学生id和任务id
     * @param userIds
     * @param taskIds
     * @return
     */
    List<ExperimentReport> findReportByUserIdsAndTaskIds(@Param("userIds") List<Long> userIds, @Param("taskIds")List<Long> taskIds);

}
